package com.ruoyi.manage.cms.domain;

import java.math.BigDecimal;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.experimental.Tolerate;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.util.List;


/**
 * 金融产品对象 hb_jrcp
 *
 * @author wangtong
 * @date 2025-07-20
 */
@Data
@ApiModel(value = "金融产品对象", description = "金融产品")
@TableName("hb_jrcp")
@Builder
public class HbJrcp extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;


    /**
     * 产品ID
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品ID")
    private String id;

    /**
     * 所属机构ID
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "所属机构ID")
    @ApiModelProperty(value = "所属机构ID")
    private String institutionId;

    /**
     * 机构名称
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "机构名称")
    @ApiModelProperty(value = "机构名称")
    private String institutionName;

    /**
     * logo
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "logo")
    @ApiModelProperty(value = "logo")
    private String institutionLogo;

    /**
     * 产品名称
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品名称")
    @ApiModelProperty(value = "产品名称")
    private String productName;

    /**
     * 最低贷款额度(单位：元)
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "最低贷款额度(单位：元)")
    @ApiModelProperty(value = "最低贷款额度(单位：元)")
    private BigDecimal minAmount;

    /**
     * 最高贷款额度(单位：元)
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "最高贷款额度(单位：元)")
    @ApiModelProperty(value = "最高贷款额度(单位：元)")
    private BigDecimal maxAmount;

    /**
     * 贷款期限
     * 对应字典表： $column.dictTable ，对应字段值：loan_term ，对应字段名：$column.dictName
     */

    @Dict(dicCode = "loan_term")
    @Excel(name = "贷款期限", dictType = "loan_term")
    @ApiModelProperty(value = "贷款期限")
    private String loanStartTerm;
    private String loanEndTerm;

    /**
     * 申请次数
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "申请次数")
    @ApiModelProperty(value = "申请次数")
    private Integer applyCount;

    /**
     * 利率范围
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */
    private Float rateStart;
    private Float rateEnd;

    /**
     * 担保方式
     * 对应字典表： $column.dictTable ，对应字段值：guarantee_type ，对应字段名：$column.dictName
     */

    @Dict(dicCode = "guarantee_type")
    @Excel(name = "担保方式", dictType = "guarantee_type")
    @ApiModelProperty(value = "担保方式")
    private String guaranteeMode;

    /**
     * 担保方式
     * 对应字典表： $column.dictTable ，对应字段值：guarantee_type ，对应字段名：$column.dictName
     */

    @Dict(dicCode = "approval_mode")
    @Excel(name = "审批模式", dictType = "approval_mode")
    @ApiModelProperty(value = "审批模式")
    private String approvalMode;

    /**
     * 还款方式
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "还款方式")
    @ApiModelProperty(value = "还款方式")
    private String repaymentMode;

    /**
     * 适用范围
     * 对应字典表： $column.dictTable ，对应字段值：service_area ，对应字段名：$column.dictName
     */

    @Dict(dicCode = "service_area")
    @Excel(name = "适用范围", dictType = "service_area")
    @ApiModelProperty(value = "适用范围")
    private String scope;

    /**
     * 产品特色
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品特色")
    @ApiModelProperty(value = "产品特色")
    private String features;

    /**
     * 产品介绍
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品介绍")
    @ApiModelProperty(value = "产品介绍")
    private String description;

    /**
     * 适用客户
     * 对应字典表： $column.dictTable ，对应字段值：kehu ，对应字段名：$column.dictName
     */

    @Dict(dicCode = "kehu")
    @Excel(name = "适用客户", dictType = "kehu")
    @ApiModelProperty(value = "适用客户")
    private String suitableCustomers;

    /**
     * 准入条件
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "准入条件")
    @ApiModelProperty(value = "准入条件")
    private String entryConditions;

    /**
     * 提交材料
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "提交材料")
    @ApiModelProperty(value = "提交材料")
    private String materials;

    /**
     * 案例
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "案例")
    @ApiModelProperty(value = "案例")
    private String caseStudy;

    /**
     * 特此声明
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "特此声明")
    @ApiModelProperty(value = "特此声明")
    private String disclaimer;

    /**
     * 发布时间
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty(value = "发布时间")
    private Date publishTime;

    /**
     * 创建时间
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty(value = "创建时间")
    private Date createTime;

    /**
     * 修改时间
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty(value = "修改时间")
    private Date updateTime;

    /**
     * 是否上架
     * 对应字典表： $column.dictTable ，对应字段值：y_n ，对应字段名：$column.dictName
     */

    @Dict(dicCode = "y_n")
    @Excel(name = "是否上架", dictType = "y_n")
    @ApiModelProperty(value = "是否上架")
    private Integer isPublished;


    /**
     * 是否上架
     * 对应字典表： $column.dictTable ，对应字段值：y_n ，对应字段名：$column.dictName
     */

    @Dict(dicCode = "y_n")
    @Excel(name = "是否政府采购贷", dictType = "y_n")
    @ApiModelProperty(value = "是否政府采购贷")
    private Integer isGovernment;

    /**
     * 删除状态
     * 对应字典表： $column.dictTable ，对应字段值：y_n ，对应字段名：$column.dictName
     */

    @Dict(dicCode = "y_n")
    @Excel(name = "删除状态", dictType = "y_n")
    @ApiModelProperty(value = "删除状态")
    private Integer isDeleted;

    /**
     * 创建人ID
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "创建人ID")
    @ApiModelProperty(value = "创建人ID")
    private String createBy;

    /**
     * 所属机构
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "所属机构")
    @ApiModelProperty(value = "所属机构")
    private String belongInstitution;

    /**
     * 修改人ID
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "修改人ID")
    @ApiModelProperty(value = "修改人ID")
    private String updateBy;

    /**
     * $column.columnComment
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Dict(readConverterExp = "$column.readConverterExp()")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @ApiModelProperty(value = "$comment", notes = "$column.readConverterExp()")
    private String remark;
    @TableField(exist = false)
    private List<String> ids;

    @Tolerate
    public HbJrcp() {
    }
}
